//  http.js
import axios from 'axios'
import { getToken } from '@/utils/auth'

//  请求拦截器
axios.interceptors.request.use(
  async config => {
    config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'

    // 登录和发送中心不需要设置token
    if (config.url.indexOf('/login') !== -1 || config.url.indexOf('/sms') !== -1) {
      return config
    }
    // 其他接口需要设置token
    const auth = JSON.parse(await getToken())
    if (auth !== null) {
      config.headers['x-access-uid'] = auth.uid
      config.headers['x-access-token'] = auth.token
    } else {
      config.headers['x-access-uid'] = localStorage.uid
      config.headers['x-access-uid'] = localStorage.token
    }

    return config
  },
  error => {
    return Promise.error(error.response)
  })

// 返回拦截器
axios.interceptors.response.use((response) => {
  // 特殊错误处理，状态为10时为登录超时
  if (response.data.code === 403 && response.data.msg === '请重新登录') {
    // // 1.清除缓存
    // localStorage.clear()
    // // 2.跳转到登录页面
    // document.location.href = '/'
    return
  }
  return response
}, function(error) {
  return Promise.reject(error)
})

// 配置
axios.defaults.baseURL = process.env.VUE_APP_BASE_API
axios.defaults.timeout = 10000
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'

// Get请求
export function httpGet({ url, params = {} }) {
  return axios.get(url, {
    params
  }).then((res) => {
    // console.log('【方法】：httpGet res【参数】：' + JSON.stringify(res))

    return res.data
  }).catch(err => {
    // console.log('【方法】：httpGet【参数】：' + JSON.stringify(err))
    return err.data
  })
}

// PUT 方法封装
export const httpPut = (url, params) => {
  return axios({
    method: 'put',
    url: url,
    data: params,
    transformRequest: [function(data) {
      let ret = ''
      for (let it in data) {
        ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
      }
      return ret
    }],
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  }).then((res) => {
    return res.data
  }).catch(err => {
    // console.log('【方法】：httpPut【参数】：' + JSON.stringify(err))
    return err.data
  })
}

// Del请求
export function httpDel({ url, params = {} }) {
  return axios.delete(url, {
    params
  }).then((res) => {
    return res.data
  }).catch(err => {
    // console.log('【方法】：httpDel【参数】：' + JSON.stringify(err))
    return err.data
  })
}

// Post请求
export function httpPost({ url, data = {}, params = {} }) {
  return axios({
    url,
    method: 'post',
    transformRequest: [function(data) {
      let ret = ''
      for (let it in data) {
        ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
      }
      return ret
    }],
    //  发送的数据
    data,
    //  url参数
    params

  }).then(res => {
    return res.data
  })
}

